package com.wsd.util;


import java.io.IOException;
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;

import com.sun.mail.smtp.SMTPMessage;

/**
 * 自动邮件发送类
 * 当新用户注册时，调用此类的send方法，系统会自动发送一封激活邮件到用户注册的邮箱中
 * @author TuZiJun
 *
 */
public class SendMail {

	/**
	 * 邮件发送方法
	 * @param from 发件人邮箱
	 * @param to 收件人邮箱
	 * @param subject 主题
	 * @param content 邮箱内容
	 */
	public static boolean send(String subject,String content) {
		Properties props = new Properties();
		Transport transport = null;
		try {
			props.load(SendMail.class.getResourceAsStream("/mail.properties"));
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		try {
			//根据属性配置文件得到一个邮件会话session
			Session mailSession = Session.getDefaultInstance(props);
			//是否在控制台显示debug信息
			mailSession.setDebug(false);
			//根据邮件会话session得到一个SMTPMessage邮件消息对象
			Message message = new SMTPMessage(mailSession);
			//将发件人邮箱封装成一个Internet地址，并且设置到邮件消息对象中
			message.setFrom(new InternetAddress(props.getProperty("mail.from")));
			//将收件人邮箱封装成一个Internet地址，并且设置到邮件消息对象中，并且接收类型为直接发送
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(props.getProperty("mail.to")));
			//将邮件的主题设置到消息对象中
			message.setSubject(subject);
			//Multipart一个容器对象，可以包含多个组件
			Multipart part = new MimeMultipart();
			//BodyPart是一个组件，包含了一些属性和内容，其中内容可以为HTML代码，被Multipart容器管理
			BodyPart htmlBody = new MimeBodyPart();
			//将邮件内容封装到BodyPart组件中，并且设置Content-Type="text/html; charset=UTF-8"
			htmlBody.setContent(content, "text/html; charset=UTF-8");
			//将htmlBody组件加入part容器
			part.addBodyPart(htmlBody);
			//将part容器设置到消息对象message中去
			message.setContent(part);
			//调用saveChanges()方法，保证消息与邮件的消息是同步的，并且邮件的改变是永久性的
			message.saveChanges();
			//根据邮局协议，从邮件会话对象中获取传输对象
			transport = mailSession.getTransport("smtp");
			//根据用户名和密码连接到指定的邮件服务器
			transport.connect(props.getProperty("mail.stmp.host"), props.getProperty("mail.user"), props.getProperty("mail.password"));
			//发送邮件消息到所有的收件人邮箱
			transport.sendMessage(message, message.getAllRecipients());
			
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			//将传输对象关闭
				try {
					transport.close();
				} catch (MessagingException e) {
					e.printStackTrace();
				}
			
		}
		return true;

	}
}
